Journal d'un Terrien

Web log de Serge Boisse

On line depuis 1992 !

Publicité
Si cette page vous a plu, Copiez son adresse et partagez-la !
http://sboisse.free.fr/trucs et astuces/Obsidian/Astuces/Snippets templater geniaux.php
Savez-vous quels sont les articles les plus vendus sur Amazon.fr ?
Snippets templater géniaux

Snippets templater géniaux pour Obsidian

Auteur : Serge Boisse
Date : Le 07/03/2025 à 20:03

(je ne dis pas qu'ils sont géniaux parce que j'en suis l'auteur, mais bon, à vous de juger)

Générer le titre avec un prompt

il suffit de créer les nouvelles notes à l'aide du Snippet suivant, qui vous demandera la nom de la note à créer et fabriquera le gabarit de la nouvelle note pour vous.

---
Auteur: Serge Boisse
Type: nouvelle_note 
Date: Le <% tp.file.creation_date("DD/MM/YYYY[ à ]HH:MM") %>
Tags: 
---
<%* 
// Prompt for the title 
let title = await tp.system.prompt('Enter title name'); 
// Rename the file to the entered 
await tp.file.rename(title); 
%> 
# <%- title %>

>Auteur : `=this.Auteur`
>Date :  `=this.Date`

Résumé : 

blabla

>[!Remarque]  Voir aussi :
>[Un super site !](<http://sboisse.free.fr>)

&nbsp;<br>

Lister les attachements d'une note

lier le snippet templater suivant avec un raccourci clavier :

<%*
// appel : j'ai créé le raccourci obsidian ctrl-j'
// voir aussi le Modèle texte à insérer/T_liste_attachements
const {path} =  tp.app.workspace.getActiveFile();
//const  path = "art.md";
let res = " ---Aucun attachement---";
const attachements = await tp.app.metadataCache.getCache(path).embeds;
let nb = 0;
if (attachements) {
	res = "";
	for (let att of attachements) {
			res += ""+att.link+"\r\n";
	}
	nb = attachements.length;
}
tp.system.prompt("Liste des pièces jointes de cette note: ("+nb+")", res, false, true);
return "";
%>

Cela ouvrira un modal qui contiendra la liste des pièces jointes de la note.

Créer un fichier index d'un répertoire

Cliquer sur le nom du répertoire, clic droit, sélectionner "Create new note from template", et appeler le modèle templater "M_index" qui contiendra le (très long) code suivant :

---
Auteur: Serge Boisse
Date: Le 13/02/2025 à 15:02
Type: liste/index
Tags: index
#types : voir [[@ types et statut]]
---
<%* 
// le nom de la note sera juste "index"
await tp.file.rename("index"); 
/**/
%> 
# index de `=this.file.folder`
Dans ce répertoire :
```dataviewjs
function titre(path) {
	let t = dv.app.metadataCache.getCache(path).headings;
	let fileName = path.replace(/\/$/, "").split("/").pop();
	if (fileName.slice(-3)==".md") 
		fileName = fileName.slice(0,-3)
	if (!t || t.length == 0) return fileName;
	t = t[0]; // first heading
	if (!t) return fileName; 
	t = t.heading;
	if (t.length <= 1 || t.length > 55) return fileName;
	if (t[t.length-1] == ">") return fileName; // templater...
//console.log(t);
	return t;
}

let parentFolder = dv.current().file.folder
if (parentFolder == "") parentFolder = "/" 


function listRecursive(folder, depth) {
	// All pages in the scope of the current path
	let pages = dv.pages('"' + folder + '"');
	// on va collecter les sous-répertoires directs
	let subfolders = [];
	pages.forEach(page => {
		let afolder = page.file.folder;
		if (afolder == folder) return;
		if (!afolder.startsWith(folder)) return;
		let relpath = afolder.substring(folder.length);
		if (relpath == "") return;
		let sub = relpath.split("/")[0];
		if (folder != "") sub = relpath.split("/")[1];
		if (sub == "") return;
		if (!subfolders.includes(sub)) {
			subfolders.push(sub);
		}
	});

	let currentFiles = "";
	let index = "";
	pages.forEach(page => {
		if (page.file.folder == folder || (folder=="" && page.file.folder == "/")) {
			// Page is in current folder
			// on exclut les pages privées
			let fm = dv.app.metadataCache.getCache(page.file.path).frontmatter;
			if (fm) {
			let tags = fm["Tags"]+fm["tags"];
				if (tags) {
				  if (tags.toLowerCase().includes("privé")) return;
				  if (tags.toLowerCase().includes("perso")) return;
				}
				let pub = fm["Publier"]+fm["Publish"]+fm["Export"];
				if (pub) {
				  if (pub.toLowerCase().includes("no")) return;
				}
			}
			//currentFiles += page.file.link + " | ";
			//currentFiles += '<br><br>'
			if (page.file.name.startsWith("index")) {
				if (page.file.folder != parentFolder)
					index = `<a class ="internal-link" href="${page.file.path}">Index</a> | `;
			} else {
				currentFiles += `<a class ="internal-link" href="${page.file.path}">${titre(page.file.path)}</a> | `
			}
		}
	});
	currentFiles += index;
	if (currentFiles.endsWith(' | ')) 
		currentFiles = currentFiles.slice(0,-3);
	
	let indent = "\t".repeat(depth);
	let rep = folder.substring(folder.lastIndexOf("/")+1);
	// on commence par le nom du répertoire
	let res = indent+"- ### "+rep+"</h3>";
	if (folder == '') res = "- ### TOUTES LES NOTES</h3>";
	//res += indent+currentFiles+"\n";
	res += currentFiles+"\n";

	// on ajoute les sous répertoires
	for (let srep of subfolders) {
		let subreps = "";
		if (folder == "")
			subreps += listRecursive(srep, depth+1);
		else
			subreps += listRecursive(folder+"/"+srep, depth+1);
		//console.log(subreps)
		//console.log(subreps.indexOf("</h3>"))
		// il faut au moins qqchose apres le nom du rep
		if (subreps.length > subreps.indexOf("</h3>")+6)
			res += subreps;
	}
	return res;
}

// choose query here
//let files = listRecursive('_Créer/Blog, vidéos, site', 0); // directory of a given folder
//let files = listRecursive(dv.current().file.folder, 0); // directory of current folder
let files = listRecursive(parentFolder, 0); // directory of current folder
dv.el("p",files)

il faut ajouter trois backquotes à la fin du fichier pour ferme le bloc dataviews

Le résultat sera la création d'un fichier "index" sous le répertoire cliqué, qui ressemblera à l'image ci-dessous:
Les fichiers marqués privés ou private ne seront pas listés, de même que ceux qui contiennent le tag "Export:" ou "Publier:" suivi de no" (ou non, ou niet...)

Pasted image 20250307213121.png

C'est pas beau, ça ?

La suite...

 

Publicité
Commentaires

Commentaires (0) :

Page :



Ajouter un commentaire (pas besoin de s'enregistrer)

Pseudo :
Message :


image de protection
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !
Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.
< Retour en haut de la page